package main

import (
	"fmt"
	"sync"
)

var (
	mapInt = make(map[int]float64, 10)
)

var lock sync.Mutex

func test(n int) {
	res := 1.0
	for i := 1.0; i <= float64(n); i++ {
		res *= i
	}
	//锁前等待，则函数没来得及加锁，程序就结束了，所以这个加锁就是根据程序运行的快慢来的
	//如果函数运行的慢，main跑的快，那是有可能函数只执行了部分，主程序提前结束的
	//time.Sleep(time.Second)
	lock.Lock()
	mapInt[n] = res
	lock.Unlock()
}

func main() {
	for i := 1; i <= 100; i++ {
		go test(i)
	}
	//time.Sleep(5 * time.Second)
	lock.Lock()
	for k, v := range mapInt {
		fmt.Println(k, v)
	}
	lock.Unlock()
}
